package cn.oppexecise;


/**
 * @author SWJ
 * @create 2021-06-10 11:36
 */
public class TestDemo {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.eat();
        //运行：吃的方法
        //调用父类中eat方法
        Cat c = new Cat();
        c.eat();
        //cat继承eat方法
//        @Overrid eat方法
        //Cat重写吃的方法
        c.Other();
        //可以调用cat中的other
//        a.other();父类不能调用子类的特有方法

        Animal a2 = new Cat();
        /**1-1多态：
         * 1.继承 父类公共方法 2.重写父类方法
         * 1.父类引用子类 指向子类对象
         * 2.编译看左边，运行看右边
         * 1-2多态：
         * 父类进行声明，调用子类方法
         * 父类实例化子类 ，关键字a2调用子类方法，*/
        Animal a3 = new Dog();
//
        a2.eat();
        a3.eat();
//        a2.Other();

        /**1-3多态：
         * 父类提供的eat()方法是可用的 子类的特有的other()不可用
         * 父类提供的功能才能用,子类特有的功能用不了*/
    }
}

class Animal {
    public void eat() {
//父类定义一个吃的方法
        System.out.println("testgitee");
        System.out.println("吃的方法");
    }
}

class Cat extends Animal {
    @Override
    public void eat() {
/**重写-吃的方法*/
        System.out.println("Cat重写吃的方法");
    }

    public void Other() {
        System.out.println("Cat自己特有的方法");
    }

}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog重写吃的方法");
    }

    public void Other() {
        System.out.println("Dog自己特有的方法");
    }
}
